%\documentclass[twoside]{article}
%\usepackage{epsfig,html,amsmath,amssymb,lscape,longtable,pstricks,cite,hyperref}
%\usepackage{graphics}
%\pagestyle{headings}
%\markboth{}{}
%\newcommand{\hytt}[1]{\texttt{\hyphenchar\font=\defaulthyphenchar #1}}

% !Mode:: "TeX:UTF-8"
\documentclass[twoside]{article}
\usepackage{epsfig,html,amsmath,longtable,cite,hyperref}
\usepackage{graphics}
\usepackage{subfigure}
\usepackage{indentfirst}
\usepackage{multicol}
\usepackage{listings}

\usepackage{xeCJK} % seperate the english and chinese

\setCJKmainfont[ItalicFont={AR PL UKai CN}]{AR PL UMing CN} %设置中文默认字体
%\XeTeXlinebreaklocale "zh"  % Auto linebreak for chinese
\XeTeXlinebreakskip = 0pt plus 1pt minus 0.1pt % Auto linebreak for chinese

\setlength{\parindent}{2em}

\begin{document}
	
%\linebreak {4}

	%{\kaishu 楷体}
	%{\heiti 黑体}
	%{\fangsong 仿宋}
	
	\title{AutoPDMS CAE\\仿Abaqus功能需求总结\\及流体分析功能设计}
	\author{
	}
	\maketitle {}
	
	\begin{figure}[h]
		\centering
	%	\includegraphics[scale=0.6]{fullscreen.png}
		%\epsfig{file=processplant.jpg,width=12cm}
		%\caption{流程工厂\label{cover}}
	\end{figure}
	\thispagestyle{empty}%目录页不显示页码
	\newpage
	\setcounter{page}{1}%从下面开始编页码
%\begin{multicols}{2}
	\numberwithin{equation}{subsection}


\tableofcontents
\newpage


\section{前言} 
\subsection{修订历史}

作者	谢新明、张喆、董浩	审核人	李国斌

完成时间	2018.11.22	审核时间	2018.11.23

版本修订历史记录：
编号	修订日期	修改内容描述和理由	修改作者	修改的页数

作者	张喆	审核人	李国斌

完成时间	2018.11.26	审核时间	2018.12.04

编号	修订日期	修改内容描述和理由	修改作者	修改的页数

1	2018.11.27		谢新明	

2	2018.11.27		董浩	

3	2018.11.27		李国斌	

4	2018.12.04		李国斌	

本文将功能需求总结书(需求总结)和软件设计规范书(功能设计)合并在一起了。其中需求总结主要由谢新明完成，李国斌补充了一些内容。27章功能设计由张喆完成，其他人补充了一些内容。

\part{CAE}
\section{CAE}
CAE(Computer Aided Engineering)即计算机辅助工程，指用计算机辅助求解分析工程和产品的各种特性，包括但不限于力学、电磁、热等多物理或化学性能，以及优化结构或材料性能等。

\subsection{简史}
使用计算机求解微分方程数值解的技术随着时代不断发展。在此过程中，发明了各种数值计算方法如有限差分法FDM、有限差分时域FDTD、有限体积法FVM、有限元法FEM、离散元法DEM、光滑粒子动力学方法SPH、分子动力学方法MD、量子力学方法QD、格子玻尔兹曼方法LBM、卷积神经网络CNN、深度学习DL、人工智能AI等。

AutoPDMS CAE主要采用FEM，以后可能加入其它方法如DEM、SPH、LBM、MD、QD等。
\subsection{AutoPDMS CAE}
AutoPDMS CAE 是一套功能强大的工程模拟的数值分析软件，其解决问题的范围从相对简单的线性分析到许多复杂的非线性问题。 AutoPDMS CAE 包括一个丰富的、可模拟任意几何形状的单元库。并拥有各种类型的材料模型库，可以模拟典型工程材料的性能，其中包括金属、橡胶、高分子材料、复合材料、钢筋混凝土、可压缩超弹性泡沫材料以及土壤和岩石等地质材料，作为通用的模拟工具， AutoPDMS CAE 除了能解决大量结构（应力 / 位移）问题，还可以模拟其他工程领域的许多问题，例如热传导、质量扩散、热电耦合分析、声学分析、岩土力学分析（流体渗透 / 应力耦合分析）及压电介质分析、分子动力学分析、量子力学计算。

\subsubsection{AutoPDMS CAE模块}
AutoPDMS CAE 有两个主求解器模块— AutoPDMS CAE/Standard 和 AutoPDMS CAE/Explicit。AutoPDMS CAE 还包含一个全面支持求解器的图形用户界面，即人机交互前后处理模块 — AutoPDMS CAE/HMI 。 AutoPDMS CAE 对某些特殊问题还提供了专用模块来加以解决，如管道应力分析模块，建筑结构分析模块，支吊架分析模块，土木建筑基础分析模块，管廊分析模块，管网流体分析模块，泵站分析模块，换热器分析模块，泵与风机分析模块，电机分析模块，内燃机分析模块，空调机分析模块，机器人模块，汽车分析模块，公交车分析模块，高速列车分析模块，飞机分析模块，手机分析模块，PCB分析模块，集成电路分析模块，分子动力学模块，材料性质模块，等离子体模块，纳米光学模块，半导体模块。

AutoPDMS CAE 被广泛地认为是功能最强的数值分析软件，可以分析复杂的固体力学结构力学系统，特别是能够驾驭非常庞大复杂的问题和模拟高度非线性问题。 AutoPDMS CAE 不但可以做单一零件的力学和多物理场的分析，同时还可以做系统级的分析和研究。 AutoPDMS CAE 的系统级分析的特点相对于其他的分析软件来说是独一无二的。由于 AutoPDMS CAE 优秀的分析能力和模拟复杂系统的可靠性使得 AutoPDMS CAE 被各国的工业和研究中所广泛的采用。 AutoPDMS CAE 产品在大量的高科技产品研究中都发挥着巨大的作用。

\subsubsection{AutoPDMS CAE功能}
静态应力/位移分析：包括线性，材料和几何非线性，以及结构断裂分析等

动态分析粘弹性/粘塑性响应分析：粘塑性材料结构的响应分析

热传导分析：传导，辐射和对流的瞬态或稳态分析

质量扩散分析：静水压力造成的质量扩散和渗流分析等

耦合分析：热/力耦合，热/电耦合，压/电耦合，流/力耦合，声/力耦合等

非线性动态应力/位移分析：可以模拟各种随时间变化的大位移、接触分析等

瞬态温度/位移耦合分析：解决力学和热响应及其耦合问题

准静态分析：应用显式积分方法求解静态和冲压等准静态问题

退火成型过程分析：可以对材料退火热处理过程进行模拟

海洋工程结构分析：

对海洋工程的特殊载荷如流载荷、浮力、惯性力等进行模拟

对海洋工程的特殊结构如锚链、管道、电缆等进行模拟

对海洋工程的特殊的交互作用，如土壤/管柱交互作用、锚链/海床摩擦、管道/管道相对滑动等进行模拟

水下冲击分析：

对冲击载荷作用下的水下结构进行分析

柔体多体动力学分析：对机构的运动情况进行分析，并和有限元功能结合进行结构和机械的耦合分析，并可以考虑机构运动中的接触和摩擦

疲劳分析：根据结构和材料的受载情况统计进行生存力分析和疲劳寿命预估

设计灵敏度分析：对结构参数进行灵敏度分析并据此进行结构的优化设计

软件除具有上述常规和特殊的分析功能外，在材料模型，单元，载荷、约束及交互作用等方面也功能强大并各具特点：

材料模型：定义了多种材料本构关系及失效准则模型，包括：

弹性：线弹性，可以定义材料的模量、泊松比等弹性特性

正交各向异性，具有多种典型失效理论，用于复合材料结构分析

多孔结构弹性，用于模拟土壤和可挤压泡沫的弹性行为

亚弹性，可以考虑应变对模量的影响

超弹性，可以模拟橡胶类材料的大应变影响

粘弹性，时域和频域的粘弹性材料模型

\subsubsection{AutoPDMS CAE塑性}

金属塑性，符合Mises屈服准则的各向同性和遵循Hill准则的各向异性塑性模型

铸铁塑性，拉伸为Rankine屈服准则，压缩为Mises屈服准则

蠕变，考虑时间硬化和应变硬化定律的各向同性和各向异性蠕变模型

扩展的Druker-Prager模型，适合于沙土等粒状材料的不相关流动的模拟

Capped Drucker-Prager模型，适合于地质、隧道挖掘等领域

Cam-Clay模型，适合于粘土类土壤材料的模拟

Mohr-Coulomb模型，这种模型与Capped Druker-Prager模型类似，但可以考虑不光滑小表面情况

泡沫材料模型，可以模拟高度挤压材料，可应用于消费品包装、及车辆安全装置等领域混凝土材料模型，这种模型包含了混凝土弹塑性破坏理论渗透性材料模型，提供了依赖于孔隙比率、饱和度和流速的各向同性和各向异性材料的渗透性模型。

其它材料特性：

包括密度、热膨胀特性、热传导率和导电率、比热、压电特性、阻尼以及用户自定义材料特性等

单元库：AutoPDMS CAE包括内容丰富的单元库，单元种类多达562种。它们可以分为8个大类，称为单元族，包括：

— 实体单元

— 壳单元

— 薄膜单元

— 梁单元

— 杆单元

— 刚体元

— 交互作用元

— 无限元 

— 流体网络单元(D类型) 

还包括其中针对特殊问题构建的特种单元如针对钢筋混凝土结构或轮胎结构的加强筋单元（*Rebar）、针对海洋工程结构的土壤/管柱交互作用单元（*Pipe-Soil）和锚链单元(*Drag Chain)，还有专门的垫圈单元和空气单元等特殊的单元等，这些单元对解决各行业领域的具体问题非常有效。

另外，用户还可以通过用户子程序自定义单元种类。

对AutoPDMS CAE进行二次开发也极为方便，AutoPDMS CAE支持FORTRAN或VC++来二次开发。

载荷、约束及交互作用：

载荷

载荷包括均匀体力、不均匀体力、均匀压力、不均匀压力、静水压力、旋转加速度、离心载荷、弹性基础，伴随力效应，集中力和弯矩，温度和其他场变量，速度和加速度等。

约束

除常规的约束外，还提供线性和非线性的多点约束(MPC)，包括刚性链、刚性梁、壳体/固体连接、循环对称约束和运动耦合等。 交互作用强大的接触对定义与分析功能为管接头接触密封分析，铰链连接分析，壳体密封分析等带来极大的便利。

\section{CAE模块总体目标}
AutoPDMS CAE 模块的最终目标是，实现对任何模型的前处理、计算、后处理。

AutoPDMS CAE模块可以选择AutoPDMS CAD模型，并对选择的模型设置边界条件，设置工况，计算各种工况下的参数，输出计算结果。

AutoPDMS CAE与AutoPDMS CAD紧密集成，利用AutoPDMS CAD实现建模和显示等前后处理，还可以直接调用AutoPDMS CAD 已有的功能设置参数，不写重复代码。对于AutoPDMS CAD现有功能不尽合理时，可以重构它，使其服务于CAD和CAE。对于AutoPDMS CAD已经具有的管道应力分析功能，可以直接引用。
\section{软件架构设计}
软件架构设计非常重要。

AVEVA PDMS软件架构设计是比较好的，AutoPDMS也从AVEVA PDMS学到了一些精髓。

这两个软件的架构设计一些特点如下：

以导航栏GUI为核心，构建层次化域对象和事务。

持久层通用化。

层次结构数据库通用化。

事务操作通用化。

无论是管道、支吊架、HVAC、电缆桥架、建筑结构，所有设计过程基本按如下模式操作：

先建立属性库和元件库。

再建立等级库。

最后建立设计库。

有了属性库、元件库和等级库，软件操作流程如下：
\subsection{建立三维几何模型}
设计库事务基本就是在统一的层次结构数据库中插入专业元件，事务完成后就形成了设计产品的三维几何模型。
\subsection{设置边界条件\label{psabcs}}
得到三维模型后，需要进行计算分析。分析之前需要设置边界条件。对管道而言，主要是插入逻辑支吊架以及荷载信息。

逻辑支吊架是一种代表真实支吊架的符号，可以用比较形象和简略的三维元件表示逻辑支吊架，并存储在元件库。

因此，可以象插入管件一样在管道上插入逻辑支吊架，这是AutoPDMS的特色功能。后来，我们开发了UEPSI代码，在AVEVA PDMS也可以使用该功能了。

总之，逻辑支吊架插入代码与插入管件代码非常相似，数据结构也相似，但是逻辑支吊点存储在ATTA。
\subsection{分析}
分析是一个难点。之前AutoPDMS是依靠外部的AutoPSA程序来完成计算分析。
\subsection{建立三维支吊架模型}
完成分析以后，可以启动支吊架设计软件PHS3D，它从AutoPSA获得计算结果数据，存储在PHS3D数据库，然后可以在PHS3D根据管道应力分析结果选择支吊架元件型号规格。

得到支吊架元件型号规格，就可以在AutoPDMS象在管路上插入管件一样，在支吊架管理节点插入支吊架真实元件几何模型了，这时的支吊架元件尺寸是真实支吊架的尺寸，不是逻辑支吊架的符号表达了。但是插入支吊架元件代码仍然与插入管道元件代码很相似，即需要调用支吊架元件库、等级库，在设计库支吊架域对象写入支吊架数据，最后可以持久化。
\subsection{设置CFD边界条件\label{cfdbcs}}
高效率设置边界条件的流程如下：

首先搜索计算模型，自动设置边界条件。

如果无法完成自动设置，就需要提示用户手工设定边界条件。

手工设定边界条件，可以尽量提示设置位置和设置类型或相关信息。

可以采用与\ref{psabcs}相似的方式，设置CFD边界条件，即：建立CFD边界条件逻辑符号元件库，代表边界条件类型，例如入口、出口。

在必要的位置插入边界条件符号，输入边界条件数据。
\subsection{出图}
建立一系列基本二维图形元件，在二维线上插入这些二维元件，最后标注尺寸，就完成了二维出图。所以，DESI设计库软件代码也可以复用一部分到PADD二维图库。
\subsection{小结}
在AutoPDMS中，对于任何设置过程，均可以采用如下流程：建立基本元件库(2D或3D)，插入这些元件在需要的位置，设置这些元件的相关数据。

如果采用这种实现方式开发CAE，首先需要建立边界条件类型元件库。AutoPDMS现在已经建立了逻辑支吊架和一些约束的元件库。

这种实现的优点是可以在模型中可视化边界条件，缺点是这些可视化符号可能干扰用户视线。这种实现方式可能不适合在模型中绘制大量节点NODE和大量单元ELEMENT，尽管在abaqus中也是用一个红色小四边形符号表示节点，但是可能更适合用一个算法绘制这些四边形，绘制直线连接单元的边。
\section{开发方案}
\subsection{GUI方案}
\subsubsection{仿照abaqus导航栏\label{gui1}}
AutoPDMS CAE GUI仿照abaqus导航栏设计并实现。该GUI可以完成类似abaqus导航栏实现的功能，能够在该界面完成模型的前处理、计算、后处理。

优点：
1，abaqus GUI已经有一些用户。
2，不需要绘制GUI图形，不需要构思GUI层次结构，节省了写GUI文档和构思的时间。
3，GUI需求很明确，只需要整理成文档即可在开发人员之间沟通。即使没有文档，开发人员也可以打开abaqus软件来在大脑中建立沟通信息。如果使用方案\ref{gui3}，只能靠两个人交流来沟通，而且由于没有文档，可能沟通错误。
4，其它。
缺点：
1，学习abaqus软件，理解其GUI需要时间。
2，由于现在不了解abaqus，不知道abaqus界面是否真的效率很高。
3，其它。

\subsubsection{仿照AutoPSA推荐工况GUI\label{gui2}}
现在AutoPDMS已经实现了一部分CAE功能，能够设置管道应力分析属性，例如支吊架、约束、附加力/力矩、附加位移/角位移、端点位移，设置温度、压力，设置推荐工况，并且可以自定义工况，导出应力分析数据，启动管道应力分析软件AutoPSA，计算选择的模型，在AutoPSA查看分析结果，输出结果到Word或Access，在AutoPDMS输出结果为ACAD图形文件.dwg格式。等等。

优点：
1，AutoPSA GUI已经有一些用户。
2，不需要绘制GUI图形，不需要构思GUI层次结构，节省了写GUI文档和构思的时间。
3，GUI需求比较明确，只需要整理成文档即可在开发人员之间沟通。即使没有文档，开发人员也可以打开AutoPSA软件来在大脑中建立沟通信息。如果使用方案\ref{gui3}，只能靠两个人交流来沟通，而且由于没有文档，可能沟通错误。
4，其它。
缺点：
1，学习AutoPSA软件，理解其GUI需要时间。
2，不知道怎样把AutoPSA推荐工况界面转换成step界面。
3，其它。
\subsubsection{根据现在团队的知识自定义PFA GUI\label{gui3}}
根据现在团队对AutoPDMS、AutoPSA、CAESARII、abaqus、ccx、cgx、CL32-win32的理解，自定义PFA GUI进行开发。
前一段时间可能就是这么做的。

优点：
1，不需要学习其它软件，只需要理解流体分析GUI的需求。
2，可以根据开发者的理解自由写step界面。
3，其它。
缺点：
1，PFA GUI没有用户，需要培训用户，用户是否真的很容易理解这些GUI。
2，需要绘制GUI图形，需要构思GUI层次结构，需要花很多时间构思GUI和写GUI文档。
3，GUI需求不太明确，不明确的需求很难整理成文档在开发人员之间沟通。即使有文档，开发人员也不可能打开PFA软件来在大脑中建立沟通信息，因为只有当PFA软件开发成功后，才能有稳定的GUI可以操作。
4，其它。
\subsubsection{其它GUI\label{gui4}}
采用其它方案写GUI。
\subsection{持久层方案}
如何处理AutoPDMS 现有的应力分析设置代码与管网流体分析代码持久层？有如下方案：
\subsubsection{增加CAE域对象，以满足CAE需求\label{persist1}}
不改AutoPDMS CAE现有代码，以保持与AutoPSA接口稳定。

另外重构一套与AutoPSA、CCX兼容的代码，既可以调用pipefem.dll和ccx.dll计算管道应力，也可以调用ccx.dll计算管网流体分析。

重构代码稳定以后，将全面取代旧的AutoPSA代码及其数据结构。最终将只维护一套新的重构代码，以节省劳力。

CAE域对象仿照abaqus层次结构，但不盲目照搬，而是有选择地优先实现一些必需的数据结构。
\subsubsection{兼容现在的部分CAE域对象\label{persist2}}
采用与AutoPDMS CAE现有代码兼容的数据结构和代码，实现管网流体分析事务和持久层代码。这是我们前一段时间采用的方案。
\subsubsection{模仿现在的部分CAE域对象增加stressinfo\label{persist3}}
采用与AutoPDMS CAE现有代码不兼容的数据结构和代码，实现管网流体分析事务和持久层代码。
\subsubsection{其它持久层\label{persist4}}
采用其它方式写持久层域对象。
\subsection{迭代实现的目标}
优先级顺序：管网流体分析、通用流体分析、管道应力分析、建筑结构分析、通用结构分析。管网流体分析为第1优先级，其它优先级顺序可能变动。
先按方案\ref{gui1}和\ref{persist1}写需求和设计，先写必需的域对象和GUI，如果最后写完了，确认没有需求误解和错误设计，可以按方案\ref{gui1}或\ref{gui3}写GUI，可以按任何一种方案写持久层。建议按\ref{persist1}写持久层。
\subsubsection{第1次迭代}
管网流体分析。
先按方案\ref{gui1}和\ref{persist1}写需求和设计，先写必需的域对象和GUI，如果最后写完了，确认没有需求误解和错误设计，开始编写代码，形成可以运行的内部测试版本(0.1版本)。
2018.11.22 谢新明完成了CAE功能需求规范总结书。团队会议讨论了该需求总结书。
2018.11.26 张喆完成流体分析功能设计规范书。
2018.11.27 团队会议讨论了功能设计规范书。选择的开发方案是按abaqus导航栏GUI做功能设计。
2018.11.27 张喆完成流体分析功能详细设计UML图。
2018.11.27 下午分工，做step详细设计：张喆负责BCs总体详细设计，谢新明负责输出字段请求和LOAD详细设计。因为现在只差step下面这些内存域对象了。
 
\subsubsection{第2次迭代}
如果开发团队觉得0.1版本不足以改善用户效率，可以按方案\ref{gui3}开发PFA GUI。此可以作为0.2版本。内部测试以后，可以提供用户测试($\beta$测试)。
\subsubsection{第3次迭代}
如果用户觉得AutoPDMS CAE很好用，会提出一些新需求，分析这些需求，按优先级和开发难度排序，满足用户需求。
\subsection{阅读者}
AutoPDMS CAE设计人员。
\subsection{参考文档}
参见\cite{zhuyiwencyq} abaqus 6.12 导航栏以及《PDMS PROPCON 属性库参考手册11.6版中文版》\cite{ligb}等资料。

\part{节点层次}
为了清晰表示节点之间层次关系，把描述导航栏顶级节点的文字分级写成章。
\section {Models}
与Models同一层次的节点有Annotations、Analysis、Datasets。
\section {Annotations}

\section {Analysis}
\subsection {Model-1}
Models下面有一个节点显示模型信息，标题是模型名字，例如Model-1。应该实现它。
再下一层有如下节点，我不了解有些节点。
它下层全部节点如下：

\subsubsection {Parts}

\subsubsection {Materials}

\subsubsection {Calibrations}
\subsubsection{Sections}
sections记录元件的截面特性，包括几何特性和材料。

Sections域对象存储截面特性FLUID SECTION卡的数据。数据结构比较复杂，与元件类型有关。

在AutoPDMS CAD建模时已经设置了几何特性，选择分析模型后搜索到截面特性并更新到sections域对象。

模型搜索程序可以设置sections域对象大部分截面几何特性。用户可以修改截面特性的阀门开度和曼宁系数，截面固体材料和流体材料。

\subsubsection{Profiles}

\subsubsection{Assembly}
为了文字层次清晰，把Assembly写成单独章。

\subsubsection{Steps}

\subsubsection{Field Output Requests}


\subsubsection {History Output Requests}

\subsubsection {time Points}

\subsubsection {ALE Adaptive Mesh Constraints}

\subsubsection {Interactions}

\subsubsection {Interaction Properties}
\subsubsection {Contact Controls}

\subsubsection{Contact InitializationsIa }

\subsubsection{Contact Stabilizations}

\subsubsection{Constraints}

\subsubsection{Connector Sections}

\subsubsection{Fields}

\subsubsection{Amplitudes}

\subsubsection{Loads}

\subsubsection{BCs}
.
\subsubsection{Predefined Field}

\subsubsection{Remeshing Rules}

\subsubsection{Optimization Tasks}

\subsubsection{Sketches}



\section{Materials}



\section{Assembly}
为了文字层次清晰，把Assembly写成单独章。

Assembly下有如下子节点。
\subsection{Instances}

\subsection{Position Constraints}
\subsection{Features}
\subsection{Sets}
Sets节点下有Nodesets节点集，Elementsets单元集。选择分析模型后搜索程序填写nodesets和elementsets节点记录。
\subsubsection{Nodes 节点和nodeset节点集域对象}

Nodes即节点，是有限元方法的基本对象，在ccx中，它被表示在readfrd.h：

typedef struct \{

int   nr;              /*   external node-nr (node[node-indx].nr) */

int   indx;            /*   node-index (node[ext-node-nr].indx)   */

char  pflag;           /*   1 if used for display purposes    */

/*  -1 if the node is deleted          */

/*   0 default                         */

double nx;             /*   coordinates  node[ext-node-nr].nx */

double ny;

double nz;
\} Nodes;

如果使用AutoPDMS paragon元件库建立各种单元类型的元件，那么节点相当于单元元件的点集，单元相当于元件的型集。

在下一次启动AutoPDMS软件查看单元节点的时候，如何保证这些存储的单元或节点号及其坐标保持不变？这是一个技术实现难点，好像必须有一个属性Fref指向元件最初规定的边界的BREP，但是，每个元件在每次从数据库读出来后都是在AutoPDMS临时生成的ACAD实体，实体的id和brep都发生了变化，如何将这些变化的节点对应起来，似乎只能依靠坐标值对应，才能把这些节点号修正为原来的号，或者干脆修改为现在的号，但这样查找的计算量似乎非常大。
\subsubsection{实现Node和nodeset节点域对象}
我现在不了解AutoPDMS和AVEVA PDMS如何管理大数据库，后者好像是可以把大型工程存储在三位数编号的项目中，例如，SAM工程的数据存储在SAM000目录下，如果数据量很大，还可以把一部分数据存储在SAM001,SAM002,...等目录下。

有2种方案存储AutoPDMS Node，用一个node表存储节点可以简化代码，用多个node表存储节点可以加快查询速度。

执行如下DDL语句可以建立node表：

CREATE TABLE node (Name char(50),Purpose char(20),ID integer,Origin\_X double,Origin\_Y double,Origin\_Z double,EnvID integer,ElementID integer,BranchRef\_EnvID integer,BranchRef\_ElementID integer,CatRef\_EnvID integer,CatRef\_ElementID integer)

执行如下DDL语句可以建立nodeset表：

CREATE TABLE nodeset (Name char(50),Purpose char(20),ID integer,member memo,EnvID integer,ElementID integer)


\subsubsection{Elements 单元和Elementset单元集域对象}
Elements即单元，是有限元方法的基本对象，在ccx中，它被表示在readfrd.h：

typedef struct \{

int nr;                /* external element-nr */

//  int indx;              /* -index (elem[external elem-nr].indx)   */

int type;              /* element type (1:Hexa8)  */

int group;

int mat;

int attr;              /* -1: unstructured mesh tr3u (-2 for mesh with libGLu tr3g ) */

/*  0: default           */

/*  1: reduced integration he8r he20r */

/*  2: incompatible modes he8i */

/*  3: DASHPOTA be2d */

/*  4: plane strain (CPE) tr3e tr6e qu4e qu8e */

/*  5: plane stress (CPS) tr3s */

/*  6: axisymmetric  (CAX) tr3c */

/*  7: fluid he8f */

/*  8: tet10m */

int nod[27];

double **side;         /* side[Nr.][x|y|z]== normal vector */

\} Elements;

对于3节点网络单元或3节点梁单元，可以建立3节点网络单元或3节点梁单元元件库来模拟管网或梁柱，3节点单元元件的流入流出点分别对应网络单元或梁单元的2个端节点，为这类单元元件增加1个中间节点P-point，Pnumber可作为节点编号。这样可以利用AutoPDMS CAD现有显示代码，显示网络单元或梁单元。

对于网络单元或梁单元，建立单元元件库似乎很适合。
对于CAE三维单元，是否也可以建立三维单元元件库？由于要在三维实体几何模型填充各种不同形状不同数量的CAE三维单元，来满足求解精度，所以需要重构现有的元件库显示代码。
\subsubsection{实现Element和Elementset单元集域对象}
执行如下DDL语句可以建立Element表：

CREATE TABLE Element (Name char(50),Purpose char(20),ID integer, member memo,EnvID integer,ElementID integer)

执行如下DDL语句可以建立Elementset表：

CREATE TABLE Elementset (Name char(50),Purpose char(20),ID integer, member memo,EnvID integer,ElementID integer)
\subsection{Surfaces}
\section{steps}
step,即不同工况，模型能设置多种step，step中设置不同边界条件以及输出设置。如果设置多种工况，可以右键选择当前选择哪种工况计算。
Output
Manning
BCs

\subsection{输出要求 }

输出要求：用户按照需要，设置输出的数据类型如流量，位移等。即提供给CCX计算的inp文件的*node print与*node output字段。

\subsubsection{使用方案: 显示输出要求}
1.点击Output，显示输出要求
2.提供设置输出请求功能 

\subsubsection{功能需求: 显示输出要求}
1.点击Output，显示输出要求
2.提供设置输出请求功能 

\subsection{曼宁系数 }
曼宁系数：管道流体分析时，每个管道都需要设置曼宁系数。

\subsubsection{使用方案: 显示曼宁系数}
1.点击Manning，显示曼宁系数
2.提供设置曼宁系数功能 

\subsubsection{功能需求: 显示输出要求}
1.点击Manning，显示曼宁系数
2.提供设置曼宁系数功能，针对模型中所有曼宁管道，都能设置曼宁系数，提供一个选择框，用户选择后该模型所有曼宁管道都默认为该曼宁系数。

\subsection{边界条件}
\subsubsection{功能需求: 流体设置}
右键创建边界条件时，能自动定位到管件或者管道，弹出界面进行设置，设置完成以后，可以转到下一个出入口进行设置，

\subsubsection{功能需求: 结构设置}

BCs是边界条件BoundaryConditions的集合。它与模型数据库类型有关。

当选择通用计算时，即eMyCAEModelType=eCAEModelType.eCMTStandard，此时应该提供一系列的BC类型给用户选择，这些类型有：

固定支吊架FIX或ANCOR

当选择CFD计算时，即eMyCAEModelType=eCAEModelType.eCMTCFD，此时应该提供一系列的BC类型给用户选择，这些类型有：

inlet

outlet

...

如果在interactions节点选择了流固耦合FSI作用，则要把流体BCs类型和固体(即通用计算)BCs类型都提供给用户选择。

\subsubsection{BCs域对象数据结构}
执行如下DDL语句可以建立BCs边界条件表：

CREATE TABLE BCs (Name char(50),Purpose char(20),ID integer, nodesetRef\_EnvID interger, nodesetRef\_ElementID interger,DOFfirstID integer,DOFlastID integer,value REAL,EnvID integer,ElementID integer)

按abaqus表示法，使用BCs域对象表示边界条件。

避免与AVEVA PDMS 11.5定义的BOUNDARY域对象冲突。详见H:\textbackslash AVEVA\textbackslash Pdms11.5.SP1\textbackslash manuals\textbackslash pdms1151\textbackslash man31\textbackslash doc1.pdf 第11页设计数据库层次：

Ground Model Element (GRDMODEL)
现场的基本形状和特征可以通过地面模型来表示。 这些可能是土堆或斜坡等自然现象。 每个地面模型元素的构建方式与其他地方描述的POHEDRON（多面体）完全相同。 对地面模型形式的限制意味着它们的用途有限。
复杂的表面轮廓更好地通过包含任何基本形状的“虚拟”结构来近似。

Site Boundaries and Roadways Element (BOUNDARY)
对于诸如栅栏和道路等场地布局功能，通常将建模限制为布置在曲面上的线和弧线就足够了。
BOUNDARY元素允许这种建模方法，通过定位成员POINTS，IPOINTS（不可见点）和TANPOINTS（切点）来描述所需的轮廓。 BOUNDARY可以被认为是一个“高级”基本元素（它的相同的低级别等价物是DRAWING，它可以属于EQUIPMENT，STRUCTURES等）。 BOUNDARY具有基元的正常绘制LEVEL属性，但没有OBSTRUCTION（因为它完全由线组成）

\section{Analysis}
Analysis下有4个子节点：

Jobs

Adaptivity Processes

Co-executions

Ootimization Processes

\subsection{Jobs}
jobs节点管理job的建立、修改、更新、删除，并实现计算过程管理。
\section{计算结果域对象Dataset}

Datasets即数据集，是指计算结果，是有限元方法的基本对象，在ccx中，它被表示在readfrd.h：

我们把dataset域对象节点放在CAE页面与Model同级，这样也许更便于展示计算结果，只要选择CAE页面的Model,step,bcs,就可以显示dataset内容。abaqus GUI不是这样布置的，它的结果页面被展示在另外一个称为结果的页面，也许是因为它输出结果内容展示形式更丰富多样，后文\ref{result} 将要介绍。
\subsection{Datasets GUI方案}
\subsubsection{仿照abaqus Result GUI\label{datasetsgui1}}
abaqus Result GUI功能很多，只能优先做一些必需的Result GUI展示结果。我还没仔细看哪一个GUI比较好。

\subsubsection{仿照AutoPSA计算结果GUI\label{datasetsgui2}}
管道应力分析软件AutoPSA有比较丰富的计算结果GUI，已经为一些用户熟悉，如果能移植到AutoPDMS中，用户可以花较短时间学会操作CAE软件，对软件推广有利。但是，从前一段时间移植AutoPSA界面来看，移植难度是比较大的。

\subsubsection{根据现在团队的知识自定义计算结果 GUI\label{datasetsgui3}}
根据现在团队对AutoPDMS、AutoPSA、CAESARII、abaqus、ccx、cgx、CL32-win32的理解，自定义Result GUI进行开发。

\subsubsection{其它Result GUI\label{datasetsgui4}}
采用其它方案写Result GUI。
\subsection{datasets持久层方案}

\subsubsection{增加datasets域对象，以满足CAE计算结果域对象需求\label{datasetspersist1}}
不改AutoPDMS CAE现有展示AutoPSA计算结果代码，以保持与AutoPSA接口稳定。

另外重构一套与AutoPSA、CCX兼容的代码，既可以调用pipefem.dll和ccx.dll计算管道应力，也可以调用ccx.dll计算管网流体分析。

重构代码稳定以后，将全面取代旧的AutoPSA代码及其数据结构。最终将只维护一套新的重构代码，以节省劳力。

datasets域对象仿照abaqus层次结构，但不盲目照搬，而是有选择地优先实现一些必需的数据结构。
\subsubsection{兼容现在的AutoPSA datasets域对象\label{datasetspersist2}}
采用与AutoPDMS CAE现有代码兼容的datasets数据结构和代码，实现管网流体分析datasets事务和持久层代码。

\subsubsection{模仿现在的AutoPSA datasets域对象增加datasets\label{datasetspersist3}}
采用与AutoPDMS CAE现有代码不兼容的datasets数据结构和代码，实现管网流体分析datasets事务和持久层代码。
\subsubsection{其它持久层\label{datasetspersist4}}
采用其它方式写datasets域对象。
\subsection{datasets迭代目标}
\subsubsection{AutoPSA计算结果数据库}
CAESARII和AutoPSA导出的管道应力分析结果数据可以保存在ACCESS格式的计算结果数据库，这种数据库的数据结构参见AutoPSA安装目录/PSA/Common Mdb/ShareRefInfo.mdb。

在该数据库加入必要的指针和字段即可存储CFD结果。
\subsubsection{实现dataset数据结构}
执行如下DDL语句可以建立dataset表：

CREATE TABLE dataset (Name char(50),Purpose char(20),ID integer, EnvID integer,ElementID integer,jobRef\_EnvID integer,jobRef\_ElementID integer,LcaseRef\_EnvID integer,LcaseRef\_ElementID integer,nodeRef\_EnvID integer,nodeRef\_ElementID integer,Value1 REAL,...,ValueN REAL)

其中ValueX REAL是伪代码，ValueX表示字段名，REAL字段类型可以是REAL或任何其它有效字段类型。

\section{查看结果Result\label{result}}
CAE页面用于CAE模型前处理和计算事务。
在它的右边设置了结果Result页面，用于CAE后处理，例如查看Dataset域对象的内容。

\begin{figure}
	\includegraphics[scale=0.5]{abaqusResult.png}
	\caption{Abaqus查看结果页面}
\end{figure}

顶级结点有：

Output Databases

Model Database (1)

Spectrums (7)

XYPlots

XYData

Paths

Display Groups (1)

Free Body Cuts

Streams

Movies

Images

同样的，我们把顶级结点描述文字分级为章。

\section{Output Databases}

\section{Model Database (1)}
\subsection{Model-1}
\subsubsection{Steps (1)}
Initial
\subsubsection{Instances}


\section{Spectrums (7)}

\subsection{Black to white}

\subsection{Blue to red}

\subsection{Rainbow}

\subsection{ Red to blue}

\subsection{Reversed rainbow}

\subsection{White to black}

\subsection{Wrap around}
\section{XYPlots}

\section{XYDataB}

\section{Paths}

\section{Display Groups (1)}
\subsection{All}

\section{Free Body Cuts}

\section{Streams}

\section{Movies}
\section {Images}
\part{功能需求总结}
\section{启动}
\subsection{选择CAE模型数据库类型}
启动abaqus以后，显示启动对话期Start Session对话框，有三个按钮可以建立模型数据库(Create model Database)：

With Standard/Explicit Model(使用标准/显式模型，用于一般的计算)

With CFD Model(带有计算流体动力学模型，用于流体计算)

With Electromagnetic Model(带有电磁场模型，用于电磁场计算)

选择不同的模型，可能影响BCs等的设置，例如选择流体模型后，BCs下多了inlet和outlet，约束的类型也有一些变化。
\subsubsection{实现}
使用一个枚举类型标记选择模型数据库类型eCAEModelType，在设置BCs或Constraints时根据eCAEModelType提供不同的BCs类型给用户选择：

enum eCAEModelType
{
	eCMTStandard=0,//结构计算
	eCMTCFD=1,//CFD计算
	eCMTElectromagnetic=2,//电磁场计算
}

使用一个枚举类型标记各专业模块eCAECategory，根据不同的eCAECategory选择不同的CAE模块界面：

enum eCAECategory
{
	eCCAbaqus=0,//进入通用界面仿abaqus界面
	eCCPFA=1,//进入管网流体分析界面
	eCCPSA=2,//进入管道应力分析界面AutoPSA或CAESARII
	eCCSSA=3,//进入结构分析界面SSA或仿SAP2000
	eCCPKPM=4,//进入结构分析界面仿pkpm
	eCCStaad=5,//进入结构分析界面仿Staadpro
	eCCAnsys=6,//进入结构分析界面仿Ansys
	eCCFSI=7,//进入管网流固耦合FSI分析
	eCCFSI3D=8,//进入三维流固耦合FSI分析
	eCCHeater=9,//进入换热器设计和分析
	eCCMotor=10,//进入电机设计和分析界面
	eCCpump=11,//进入泵设计和分析界面
}

\subsection{进入abaqus界面功能模块}
如果输入CAE命令，会设置eMyCAECategory=eCAECategory.eCCAbaqus，此时应该先选择eCAEModelType类型。这样就会在AutoPDMS导航栏设计库模块页面右侧加入CAE页面，CAE页面GUI元素与abaqus导航栏完全相同。如下：

abaqus导航栏有许多节点。考虑到完全实现abaqus导航栏所有节点需要很多工作量，列出了一些必须实现的节点，不实现这些节点，并输出其值，就不可能得到正确计算结果。

\part {用例}
\section{CAE界面}
\subsection {使用方案：显示流体分析界面}
1.模块流体分析显示流体分析导航栏界面
2.输入命令选择数据库模型类型
3,选择数据库模型类型-流体分析类型后，显示流体分析导航栏界面
4.输入命令->PFA->显示流体分析导航栏界面
\section{Material材料}
\subsection{使用方案：显示材料特性 }
显示材料特性：根据介质温度、压力显示相应温度下的属性。

\subsection{使用方案：自定义材料功能}
右键菜单自定义材料，调用CustomMaterial.dll动态库显示自定义材料对话框。

右键菜单不太方便，也可以仿照AutoPSA单元数据输入页面材料特性选项按钮后面跟一个自定义材料按钮，便于操作。

因为较少使用该功能，可以放它到主菜单。
\section{sections截面特性}
\subsection{使用方案：显示截面特性 }
在Abaqus中，先定义材料再定义截面属性，然后可以为截面属性分配材料，截面属性可以沿着分支传播，除非截面属性被修改。对于结构和耦合计算分析仿照Abaqus利用模型交互方式实现定义截面特性的方法，在点击截面属性这里应该提供一些功能:
指定流体材料；
显示该截面介质温度下材料特性；
考虑到用户之前使用过的比如abaqus、REVIT等软件的习惯，如果对某个截面设置了材料，完成了截面属性操作，当点击该截面属性时需要在模型的几何结构对应位置高亮显示。

\part {功能设计}

\section {功能设计}

\subsection{CFD界面}
\subsubsection {功能设计: 新建流体分析模块}
设计一个流体分析模块

设计：模仿设计模块或等级模块，数据库中新建流体分析模块数据库。WORLD节点下仿照Abaqus生成三个节点：Models，Analysis,Datasets.
Models下一级节点列出ModelNames列表，ModelNames下一级列出分析模型数据如装配，Steps等；Analysis下一级列出分析的Jobs；Datasets是分析结果域对象。
Models和Analysis域对象是管理节点。
\section{Models}
\subsubsection {功能设计：显示模型域对象}
模型的选择与添加：3种方式：ACAD命令PFA，设计库右键菜单PFA管网流体分析，在CAE导航栏直接点击模型添加或修改。
用户在设计模块中输入命令并选择完管道模型后，切换到流体分析模块并新建一个对象CFD，即Abaqus中的模型；同时将管道模型划分好节点和单元；并在节点下自动生成以下必需节点：Material，Assembly，Steps，然后在子节点下自动生成一些节点和数据。用户还可以点击模块，选择流体分析模块，查看之前进行的分析。
右键新加功能(这个功能给开发者调试程序查看inp文件比较方便，建议使用一个不开放给最终用户的内部命令如debugInp来查看inp文件，不要呈现给最终用户)
编辑关键字，用户可以查看Inp文件，看那些条件已经设置好了。节点和单元可以不要显示。(最终用户应该是需要看所有节点单元等全部输出信息，但开发人员可以只看step等，不看节点或单元，以免信息太多干扰调试)
建议尽量使用域对象传递数据，尽量减少查看文本文件。
\subsection{Material}
\subsubsection {功能设计：显示材料设置（Material）}
仿照AutoPSA实现材料功能，直接调用材料的对话框。
右键点击Material节点，出现菜单栏：添加材料，点击添加材料后弹出AutoPSA的材料对话框，只需要在对话框中添加确认，取消按钮。点击确认后在Material节点下新建一个详细材料节点如material1(建议保存到材料名属性库Propcon-world-matw-SOLI或FLUI节点，同时也保存在AutoPSA材料库)，但是节点名称不能取材料的名字，因为AutoPDMS中节点名称不能名字相同，假如用户不同模型中需要添加相同材料则会冲突。
右键点击详细材料节点如material1节点出现菜单栏：查看特性。用户可以通过这个查看材料特性或是对数据进行修改。(请描述详细材料节点如何与边界条件中设置的温度联系，显示对应节点下对应温度值的特性)
Material域对象中的属性应该包括各种分析中所需要用到的属性。当属性对温度依赖时，读取保存时可以仿照stressinfo将属性的数据类型设为字符串类型。(此属性温度依赖代码如何通用于管道应力分析和管网流体分析？目前看起来似乎是不能通用，只能单独写。因为PSA材料属性输出到.psa文件里依赖于单元和温度，而PFA输出在inp文件里只依赖温度。不过，还是可以统一的，因为在输出到文件之前还是可以让属性依赖于温度和单元或sections)
\subsubsection{功能需求: 自定义材料命令菜单p2}
1.提供自定义材料右键菜单

自定义材料功能已经在以前开发的管道应力分析软件AutoPSA实现了，代码在ShareDLL库下的一个动态库CustomMaterial.dll，添加材料时要选择规程，建议选择ALLCODE(内部规范号为0)，AutoPDMS CAE代码调用它获取材料时也要从ALLCODE规范取值，即，添加的材料和获取材料特性必须用同一个codeid。如果不能保证这两个codeid同步，就不能获得正确的材料特性。详见 材料特性库CustomMaterial.vcproj。
\subsection{Sections截面特性}
\subsubsection {功能设计: 显示截面特性（Sections）}
\subsubsection {功能设计: 显示各种参数（Parameters）}
如何设置和显示各种参数，如曼宁系数(TYPE=1)、粗糙度(TYPE=2)、阀门开度(TYPE=3)、任何可能需要设置的值(...)。

可以用一个通用域对象GeneralValue存储这些值，GeneralValue数据结构：ID,值类型,值数据，引用。这些值的类型包括但不限于：曼宁系数(TYPE=1)、粗糙度(TYPE=2)、阀门开度(TYPE=3)、水位、温度、压力、流量、任何可能需要设置的值(...)。引用是指这个值作用在哪个单元集或节点集。

GeneralValue域对象可以放在Sections下，也可以放在branch下，或者step下。

GeneralValue下级节点，可以是值类型，也可以是引用的类型。

也可以用BCs来取代GeneralValue。
\subsection{Assembly}
\subsubsection {功能设计: 显示模型装配（Assembly）}
用户在选择完模型并新建对象CFD时，在CFD下自动生成Assembly节点的同时，在Assembly节点下新建Instances，Sets两个节点。在Instances节点下为选择的管道模型每个分支新建一个对象Branch（名称待定），新建一个Equipmentsets存储每个设备(目的是为了查找设备管嘴，定位出入口，因此似乎还要在equipmentsets节点下新建一个nozzlesets管嘴节点表。branch下新建nodes节点域对象包含划分好的节点信息，新建Elements域对象包含划分好的单元信息。

似乎还要加一个tube或elbow/bend域对象用于设置曼宁系数和粗糙度，一个Valve域对象用于设置阀门开度，这两个域对象也可以加在sections域对象或BCs域对象下，也可以专门设置maning域对象、AbsoluteRroughness粗糙度域对象、ValveOpening阀门开度域对象存储相关值，也可以用一个通用域对象GeneralValue存储这些值，GeneralValue数据结构：ID,值类型,值数据，引用。从GeneralValue数据结构看，可以用BCs来取代GeneralValue，但是BCs有固定的一些类型定义，如果忽视BCs这些固定的类型定义，BCs完全可以取代GeneralValue)，对象中包含它所对应的分支或设备的引用。Sets下自动生成Nodesets节点集，Elementsets单元集两个节点。
关于节点与单元信息的保存，有两种方案：
一．每个节点和单元都新建一个对象存储。缺点：节点和单元的数量可能过多，不便于用户查看。
二．所有节点和单元的信息都放到一个字符串中，存放到Nodes，Elements域对象的某个属性中。缺点：
Node域对象中包含节点编号，节点坐标。
Element域对象中包括该单元所包括的Node对象的ID，单元对应的管件。
nodesets域对象包含节点编号数组。
elementsets域对象包含单元编号数组。
nodesets和elementsets需要保存。
nodes和elements需要保存。
单元信息是否需要保存？即边界条件是否保存到单元中。边界条件保存在BCs域对象。
\subsection{steps}
\subsubsection {功能设计: 显示Steps设置（Steps）}
Steps节点下不同Step即代表不同工况，用户需要进行分析时，首先需要右击Steps，显示菜单栏：新建Step，选择新建后，弹出Step设置框，顶部有四个对话框切换栏，包括输出请求，载荷，边界条件，基本条件。每个对话框对应一个域对象。
输出请求（Output）即用于CCX计算的Inp文件中Node print和Node file关键字中需要设置的信息，对设置进行描述后提供给用户选择。
载荷（Load）即INP文件中的Load字段，包括重力信息等，同样将其通俗化后交给用户设置。
基本条件，用户可以设置曼宁系数，摩擦系数，水位，阀门开度等等
曼宁系数为针对管道模型中的管道所提供的参数设置域对象。每个管道都提供设置曼宁系数的选择，可以通过仿照AutoPSA的前后查找一个个对其进行设置，并提供一个传递的选择框，选择后，之后的所有曼宁系数都会默认被设置为当前的曼宁系数。曼宁系数的保存与节点单元的保存相类似，那两种方案都可以选择，除此之外还可以将数据存储到单元或节点域对象中。
阀门开度 用户可以自己在模型中选择要设置的阀门开度，也可以有系统提供去设置。
边界条件（BCs）是针对管道模型中的所有出入口设置的温度，压力，流量三个数据，三个数据中只需要选择任意两个进行设置，但本次分析所有的边界条件都需要设置相同的两个数据。边界条件同样可以通过仿照AutoPSA的前后查找一个个对其进行设置。数据的保存与曼宁系数类似。
输出请求与载荷域对象中所需要保存的属性就是需要写到inp文件中的数据。


***边界条件设置对象是节点，需要找到对应的出入口节点ID，但是管网分析节点号也很多，如果前后查找是否会耗时较多？我的建议是在选定模型后，就应该搜索出所有的出入口，并提供对应的节点号，当进行边界条件设置时，只需要对这些搜索出来的节点进行设置即可。-----谢新明
\subsection{jobs}
\subsubsection {功能设计：显示Jobs对象}
在Analysis节点下新建Jobs节点，当用户想要进行分析时，在Jobs节点下右键选择新建Job，弹出Job设置对话框，用户可以在此处选择Steps中设置的Step。选择后，通过对Job节点右键选择计算即可将本次Job中的所有设置写入到inp文件中，并将文件传递给CCX进行计算。

AutoPDMS中右键点击导航栏中的节点，显示的菜单是同一个，可以通过菜单栏中设置相同的名称，不同的域对象中写对应的事件。
\section{datasets或Result}
\subsubsection {功能设计：显示结果}
在Datasets节点下新建显示节点，等用户完成以后，结果用表格的形式出来，用户只能以读的方式打开，不能去修改数据，
表格 提供筛选功能。

\section{其他的需求}
\section{有待解决的问题列表}
\section{附录}
无。

\section{CAE 功能评估表}


\begin{thebibliography}{99}
\bibitem{zhuyiwencyq} 朱,以文, and 蔡,元奇等. (译), \textit{abaqus从入门到精通}.,武汉大学建筑学院, 湖北,(2003).
\bibitem{ligb} 李,国斌, and 等. (译), \textit{PDMS PROPCON 属性库参考手册11.6版中文版}.,长沙优易软件开发有限公司, 湖南,(2018).
	
	
	\end{thebibliography}

%\end{multicols}


\end{document}